package com.finger.gulimall.cart.service;

import com.finger.gulimall.cart.vo.Cart;
import com.finger.gulimall.cart.vo.CartItem;

import java.util.List;
import java.util.concurrent.ExecutionException;

public interface CartService {
    /**
     * 将商品添加到购物车
     * @param skuId 商品skuid
     * @param num 商品数量
     * @return CartItem 添加到缓存中的购物项
     */
    CartItem addToCart(Long skuId, Integer num) throws ExecutionException, InterruptedException;

    /**
     * 根据商品id查出购物车中的商品
     * @param skuId 商品skuid
     * @return CartItem
     */
    CartItem getItem(Long skuId);

    /**
     * 获取当前用户的购物车
     * @return Cart
     */
    Cart getCartWithItems();

    /**
     * 更新购物车中购物项的选中状态
     * @param check 选中状态：选中：1，未选中：0
     * @param skuId 商品的skuid
     */
    void updateCheckStatus(Integer check, Long skuId);

    /**
     * 更新购物车中购物项的数量
     * @param skuId 商品id
     * @param num 商品数量
     */
    void updateCountNum(Long skuId, Integer num);

    /**
     * 移除购物车中的该商品
     * @param skuId 待移除的商品id
     */
    void removeItem(Long skuId);

    /**
     * 供订单模块调用，获取当前用户选中的全部订单项
     * @return
     */
    List<CartItem> getItemsForOrderConfirm();

}
